package algorithm.leetcode;

/**
 * 给定一个链表，删除链表的倒数第 n 个节点，并且返回链表的头结点。
 * <p>
 * 示例：
 * <p>
 * 给定一个链表: 1->2->3->4->5, 和 n = 2.
 * <p>
 * 当删除了倒数第二个节点后，链表变为 1->2->3->5.
 * 说明：
 * <p>
 * 给定的 n 保证是有效的。
 * <p>
 *
 * @author: zhouj-j
 * @since: 2018/7/6
 */
public class __019_remove_nth_from_end {

    public ListNode removeNthFromEnd(ListNode head, int n) {
        int count = 0;
        ListNode p = head, q = head;
        while (count < n) {
            q = q.next;
            count++;
        }
        if (q == null) {
            return p.next;
        }
        while (q.next != null) {
            q = q.next;
            p = p.next;
        }
        p.next = p.next.next;
        return head;
    }

}


